package com.yjxxt;

import com.yjxxt.dao.EmpDao;
import com.yjxxt.vo.DE;
import com.yjxxt.vo.Emp;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

import java.util.Date;
import java.util.List;

public class EmpTest {
    static SqlSessionFactory sqlSessionFactory = null;
    static SqlSession session =null;
    static EmpDao mapper = null;
    static{
        //定义配置文件的路径，这里表示 mybatis-config.xml 位于项目的类路径（classpath）下（通常是 src/main/resources 目录）。
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            //通过 MyBatis 提供的 Resources 工具类，加载配置文件并转换为输入流
            inputStream = Resources.getResourceAsStream(resource);
        }catch (IOException e){
            e.printStackTrace();
        }
        //通过 SqlSessionFactoryBuilder 解析配置文件输入流，创建 SqlSessionFactory（会话工厂），它是创建 SqlSession 的核心工厂类（单例模式，全局通常只需要一个）。
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //创建 SqlSession 实例,可以设置事务自动提交: openSession(true)
        //openSession() 无参或flase: 关闭事务自动提交,需要手动提交session.commit()
        session = sqlSessionFactory.openSession();
        //通过 MyBatis 的 SqlSession 对象获取 DeptDao 接口的代理实现类实例（即 Mapper 代理对象）。
        //后续可通过该 mapper 实例调用接口中定义的方法（如 selectAll()、insertDept() 等），MyBatis 会自动执行对应的 SQL 语句。
        mapper = session.getMapper(EmpDao.class);
    }

    public static void selectDnameAndEname(){
        List<DE> de = mapper.selectDnameAndEname();
        for(DE d:de){
            System.out.println(d.getEname()+","+d.getDname());
        }

    }

    public static void selectMaxSal(){
        Emp emp = mapper.selectMaxSal();
        System.out.println(emp);
    }

    public static void selectByEmpno(int empno){
        Emp emp = mapper.selectByEmpno(empno);
        if(emp!=null){
            System.out.println(emp.getEname()+","+emp.getJob()+","+emp.getMgr()+","+emp.getHiredate()+","+emp.getSal()+","+emp.getComm()+","+emp.getDeptno());
        }
        else{
            System.out.println("查询失败");
        }
    }

    public static void updateEmp(int empno, String ename, String job, int mgr, Date hiredate, int sal, int comm, int deptno){
        Emp emp = new Emp(empno,ename,job,mgr,hiredate,sal,comm,deptno);
        int result = mapper.updateEmp(emp);
        if(result>0){
            System.out.println("更新成功");
            session.commit();
        }
        else{
            System.out.println("更新失败");
        }

    }

    //根据empno删除员工信息
    public static void deleteEmp(int empno){
        int result = mapper.deleteEmp(empno);
        if(result>0){
            System.out.println("删除成功");
            session.commit();
        }
        else{
            System.out.println("删除失败");
        }
    }

    //根据字查找员工信息
    public static void selectLikeEname(String ename){
        List<Emp> emp = mapper.selectLikeEname(ename);
        if(emp!=null){
            for(Emp e:emp){
                System.out.println(e);

            }
        }
        else{
            System.out.println("查询失败");
        }
    }

    //插入员工信息
    public static int insertEmp(String ename, String job, int mgr, Date hiredate, int sal, int comm, int deptno){
        Emp emp = new Emp(ename,job,mgr,hiredate,sal,comm,deptno);
        int result = mapper.insertEmp(emp);
        if(result>0){
            System.out.println("插入成功");
            session.commit();
            return emp.getEmpno();
        }
        else{
            System.out.println("插入失败");
            return 0;
        }
    }


}
